{
  "cells": [
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Historical people: Quick and dirty\n",
        "\n",
        "This example shows how to get some initial record linkage results as quickly as possible.\n",
        "\n",
        "There are many ways to improve the accuracy of this model. But this may be a good place to start if you just want to give Splink a try and see what it's capable of.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "<a target=\"_blank\" href=\"https://colab.research.google.com/github/moj-analytical-services/splink/blob/master/docs/demos/examples/duckdb/quick_and_dirty_persons.ipynb\">\n",
        "  <img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/>\n",
        "</a>\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "execution": {
          "iopub.execute_input": "2024-06-07T09:20:37.624889Z",
          "iopub.status.busy": "2024-06-07T09:20:37.624517Z",
          "iopub.status.idle": "2024-06-07T09:20:37.644289Z",
          "shell.execute_reply": "2024-06-07T09:20:37.643404Z"
        },
        "tags": [
          "hide_input"
        ]
      },
      "outputs": [],
      "source": [
        "# Uncomment and run this cell if you're running in Google Colab.\n",
        "# !pip install splink"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "execution": {
          "iopub.execute_input": "2024-06-07T09:20:37.648712Z",
          "iopub.status.busy": "2024-06-07T09:20:37.648404Z",
          "iopub.status.idle": "2024-06-07T09:20:39.278642Z",
          "shell.execute_reply": "2024-06-07T09:20:39.277984Z"
        }
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>unique_id</th>\n",
              "      <th>cluster</th>\n",
              "      <th>full_name</th>\n",
              "      <th>first_and_surname</th>\n",
              "      <th>first_name</th>\n",
              "      <th>surname</th>\n",
              "      <th>dob</th>\n",
              "      <th>birth_place</th>\n",
              "      <th>postcode_fake</th>\n",
              "      <th>gender</th>\n",
              "      <th>occupation</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>Q2296770-1</td>\n",
              "      <td>Q2296770</td>\n",
              "      <td>thomas clifford, 1st baron clifford of chudleigh</td>\n",
              "      <td>thomas chudleigh</td>\n",
              "      <td>thomas</td>\n",
              "      <td>chudleigh</td>\n",
              "      <td>1630-08-01</td>\n",
              "      <td>devon</td>\n",
              "      <td>tq13 8df</td>\n",
              "      <td>male</td>\n",
              "      <td>politician</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>Q2296770-2</td>\n",
              "      <td>Q2296770</td>\n",
              "      <td>thomas of chudleigh</td>\n",
              "      <td>thomas chudleigh</td>\n",
              "      <td>thomas</td>\n",
              "      <td>chudleigh</td>\n",
              "      <td>1630-08-01</td>\n",
              "      <td>devon</td>\n",
              "      <td>tq13 8df</td>\n",
              "      <td>male</td>\n",
              "      <td>politician</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>Q2296770-3</td>\n",
              "      <td>Q2296770</td>\n",
              "      <td>tom 1st baron clifford of chudleigh</td>\n",
              "      <td>tom chudleigh</td>\n",
              "      <td>tom</td>\n",
              "      <td>chudleigh</td>\n",
              "      <td>1630-08-01</td>\n",
              "      <td>devon</td>\n",
              "      <td>tq13 8df</td>\n",
              "      <td>male</td>\n",
              "      <td>politician</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>Q2296770-4</td>\n",
              "      <td>Q2296770</td>\n",
              "      <td>thomas 1st chudleigh</td>\n",
              "      <td>thomas chudleigh</td>\n",
              "      <td>thomas</td>\n",
              "      <td>chudleigh</td>\n",
              "      <td>1630-08-01</td>\n",
              "      <td>devon</td>\n",
              "      <td>tq13 8hu</td>\n",
              "      <td>None</td>\n",
              "      <td>politician</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Q2296770-5</td>\n",
              "      <td>Q2296770</td>\n",
              "      <td>thomas clifford, 1st baron chudleigh</td>\n",
              "      <td>thomas chudleigh</td>\n",
              "      <td>thomas</td>\n",
              "      <td>chudleigh</td>\n",
              "      <td>1630-08-01</td>\n",
              "      <td>devon</td>\n",
              "      <td>tq13 8df</td>\n",
              "      <td>None</td>\n",
              "      <td>politician</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "    unique_id   cluster                                         full_name  \\\n",
              "0  Q2296770-1  Q2296770  thomas clifford, 1st baron clifford of chudleigh   \n",
              "1  Q2296770-2  Q2296770                               thomas of chudleigh   \n",
              "2  Q2296770-3  Q2296770               tom 1st baron clifford of chudleigh   \n",
              "3  Q2296770-4  Q2296770                              thomas 1st chudleigh   \n",
              "4  Q2296770-5  Q2296770              thomas clifford, 1st baron chudleigh   \n",
              "\n",
              "  first_and_surname first_name    surname         dob birth_place  \\\n",
              "0  thomas chudleigh     thomas  chudleigh  1630-08-01       devon   \n",
              "1  thomas chudleigh     thomas  chudleigh  1630-08-01       devon   \n",
              "2     tom chudleigh        tom  chudleigh  1630-08-01       devon   \n",
              "3  thomas chudleigh     thomas  chudleigh  1630-08-01       devon   \n",
              "4  thomas chudleigh     thomas  chudleigh  1630-08-01       devon   \n",
              "\n",
              "  postcode_fake gender  occupation  \n",
              "0      tq13 8df   male  politician  \n",
              "1      tq13 8df   male  politician  \n",
              "2      tq13 8df   male  politician  \n",
              "3      tq13 8hu   None  politician  \n",
              "4      tq13 8df   None  politician  "
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from splink.datasets import splink_datasets\n",
        "\n",
        "df = splink_datasets.historical_50k\n",
        "df.head(5)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "execution": {
          "iopub.execute_input": "2024-06-07T09:20:39.330739Z",
          "iopub.status.busy": "2024-06-07T09:20:39.330384Z",
          "iopub.status.idle": "2024-06-07T09:20:39.345331Z",
          "shell.execute_reply": "2024-06-07T09:20:39.344598Z"
        }
      },
      "outputs": [],
      "source": [
        "from splink import block_on, SettingsCreator\n",
        "import splink.comparison_library as cl\n",
        "\n",
        "\n",
        "settings = SettingsCreator(\n",
        "    link_type=\"dedupe_only\",\n",
        "    blocking_rules_to_generate_predictions=[\n",
        "        block_on(\"full_name\"),\n",
        "        block_on(\"substr(full_name,1,6)\", \"dob\", \"birth_place\"),\n",
        "        block_on(\"dob\", \"birth_place\"),\n",
        "        block_on(\"postcode_fake\"),\n",
        "    ],\n",
        "    comparisons=[\n",
        "        cl.ForenameSurnameComparison(\n",
        "            \"first_name\",\n",
        "            \"surname\",\n",
        "            forename_surname_concat_col_name=\"first_and_surname\",\n",
        "        ),\n",
        "        cl.DateOfBirthComparison(\n",
        "            \"dob\",\n",
        "            input_is_string=True,\n",
        "        ),\n",
        "        cl.LevenshteinAtThresholds(\"postcode_fake\", 2),\n",
        "        cl.JaroWinklerAtThresholds(\"birth_place\", 0.9).configure(\n",
        "            term_frequency_adjustments=True\n",
        "        ),\n",
        "        cl.ExactMatch(\"occupation\").configure(term_frequency_adjustments=True),\n",
        "    ],\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "execution": {
          "iopub.execute_input": "2024-06-07T09:20:39.349123Z",
          "iopub.status.busy": "2024-06-07T09:20:39.348832Z",
          "iopub.status.idle": "2024-06-07T09:20:39.807802Z",
          "shell.execute_reply": "2024-06-07T09:20:39.807089Z"
        }
      },
      "outputs": [],
      "source": [
        "from splink import Linker, DuckDBAPI\n",
        "\n",
        "\n",
        "linker = Linker(df, settings, db_api=DuckDBAPI(), set_up_basic_logging=False)\n",
        "deterministic_rules = [\n",
        "    \"l.full_name = r.full_name\",\n",
        "    \"l.postcode_fake = r.postcode_fake and l.dob = r.dob\",\n",
        "]\n",
        "\n",
        "linker.training.estimate_probability_two_random_records_match(\n",
        "    deterministic_rules, recall=0.6\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "execution": {
          "iopub.execute_input": "2024-06-07T09:20:39.811242Z",
          "iopub.status.busy": "2024-06-07T09:20:39.810994Z",
          "iopub.status.idle": "2024-06-07T09:20:42.328241Z",
          "shell.execute_reply": "2024-06-07T09:20:42.327675Z"
        }
      },
      "outputs": [
        {
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "c059aca16c8c48b0bb223e4350ba465f",
              "version_major": 2,
              "version_minor": 0
            },
            "text/plain": [
              "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "linker.training.estimate_u_using_random_sampling(max_pairs=2e6)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "execution": {
          "iopub.execute_input": "2024-06-07T09:20:42.331754Z",
          "iopub.status.busy": "2024-06-07T09:20:42.331463Z",
          "iopub.status.idle": "2024-06-07T09:20:44.521913Z",
          "shell.execute_reply": "2024-06-07T09:20:44.521209Z"
        }
      },
      "outputs": [
        {
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "52b43c785e454da7b1dd85706a92c17c",
              "version_major": 2,
              "version_minor": 0
            },
            "text/plain": [
              "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\n",
            " -- WARNING --\n",
            "You have called predict(), but there are some parameter estimates which have neither been estimated or specified in your settings dictionary.  To produce predictions the following untrained trained parameters will use default values.\n",
            "Comparison: 'first_name_surname':\n",
            "    m values not fully trained\n",
            "Comparison: 'first_name_surname':\n",
            "    u values not fully trained\n",
            "Comparison: 'dob':\n",
            "    m values not fully trained\n",
            "Comparison: 'postcode_fake':\n",
            "    m values not fully trained\n",
            "Comparison: 'birth_place':\n",
            "    m values not fully trained\n",
            "Comparison: 'occupation':\n",
            "    m values not fully trained\n"
          ]
        }
      ],
      "source": [
        "results = linker.inference.predict(threshold_match_probability=0.9)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "execution": {
          "iopub.execute_input": "2024-06-07T09:20:44.525778Z",
          "iopub.status.busy": "2024-06-07T09:20:44.525492Z",
          "iopub.status.idle": "2024-06-07T09:20:44.543212Z",
          "shell.execute_reply": "2024-06-07T09:20:44.542595Z"
        }
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>match_weight</th>\n",
              "      <th>match_probability</th>\n",
              "      <th>unique_id_l</th>\n",
              "      <th>unique_id_r</th>\n",
              "      <th>first_name_l</th>\n",
              "      <th>first_name_r</th>\n",
              "      <th>surname_l</th>\n",
              "      <th>surname_r</th>\n",
              "      <th>first_and_surname_l</th>\n",
              "      <th>first_and_surname_r</th>\n",
              "      <th>...</th>\n",
              "      <th>gamma_postcode_fake</th>\n",
              "      <th>birth_place_l</th>\n",
              "      <th>birth_place_r</th>\n",
              "      <th>gamma_birth_place</th>\n",
              "      <th>occupation_l</th>\n",
              "      <th>occupation_r</th>\n",
              "      <th>gamma_occupation</th>\n",
              "      <th>full_name_l</th>\n",
              "      <th>full_name_r</th>\n",
              "      <th>match_key</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>3.170005</td>\n",
              "      <td>0.900005</td>\n",
              "      <td>Q7412607-1</td>\n",
              "      <td>Q7412607-3</td>\n",
              "      <td>samuel</td>\n",
              "      <td>samuel</td>\n",
              "      <td>shelley</td>\n",
              "      <td>shelley</td>\n",
              "      <td>samuel shelley</td>\n",
              "      <td>samuel shelley</td>\n",
              "      <td>...</td>\n",
              "      <td>0</td>\n",
              "      <td>whitechapel</td>\n",
              "      <td>city of london</td>\n",
              "      <td>0</td>\n",
              "      <td>illuminator</td>\n",
              "      <td>illuminator</td>\n",
              "      <td>1</td>\n",
              "      <td>samuel shelley</td>\n",
              "      <td>samuel shelley</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>3.170695</td>\n",
              "      <td>0.900048</td>\n",
              "      <td>Q15997578-4</td>\n",
              "      <td>Q15997578-7</td>\n",
              "      <td>job</td>\n",
              "      <td>wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>None</td>\n",
              "      <td>job wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>...</td>\n",
              "      <td>-1</td>\n",
              "      <td>wrexham</td>\n",
              "      <td>wrexham</td>\n",
              "      <td>2</td>\n",
              "      <td>association football player</td>\n",
              "      <td>association football player</td>\n",
              "      <td>1</td>\n",
              "      <td>job wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>3.170695</td>\n",
              "      <td>0.900048</td>\n",
              "      <td>Q15997578-2</td>\n",
              "      <td>Q15997578-7</td>\n",
              "      <td>job</td>\n",
              "      <td>wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>None</td>\n",
              "      <td>job wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>...</td>\n",
              "      <td>-1</td>\n",
              "      <td>wrexham</td>\n",
              "      <td>wrexham</td>\n",
              "      <td>2</td>\n",
              "      <td>association football player</td>\n",
              "      <td>association football player</td>\n",
              "      <td>1</td>\n",
              "      <td>job wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>3.170695</td>\n",
              "      <td>0.900048</td>\n",
              "      <td>Q15997578-1</td>\n",
              "      <td>Q15997578-7</td>\n",
              "      <td>job</td>\n",
              "      <td>wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>None</td>\n",
              "      <td>job wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>...</td>\n",
              "      <td>-1</td>\n",
              "      <td>wrexham</td>\n",
              "      <td>wrexham</td>\n",
              "      <td>2</td>\n",
              "      <td>association football player</td>\n",
              "      <td>association football player</td>\n",
              "      <td>1</td>\n",
              "      <td>job wilding</td>\n",
              "      <td>wilding</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>3.172553</td>\n",
              "      <td>0.900164</td>\n",
              "      <td>Q5726641-11</td>\n",
              "      <td>Q5726641-8</td>\n",
              "      <td>henry</td>\n",
              "      <td>harry</td>\n",
              "      <td>page</td>\n",
              "      <td>paige</td>\n",
              "      <td>henry page</td>\n",
              "      <td>harry paige</td>\n",
              "      <td>...</td>\n",
              "      <td>2</td>\n",
              "      <td>staffordshire moorlands</td>\n",
              "      <td>staffordshire moorlands</td>\n",
              "      <td>2</td>\n",
              "      <td>cricketer</td>\n",
              "      <td>cricketer</td>\n",
              "      <td>1</td>\n",
              "      <td>henry page</td>\n",
              "      <td>harry paige</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>5 rows × 26 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "   match_weight  match_probability  unique_id_l  unique_id_r first_name_l  \\\n",
              "0      3.170005           0.900005   Q7412607-1   Q7412607-3       samuel   \n",
              "1      3.170695           0.900048  Q15997578-4  Q15997578-7          job   \n",
              "2      3.170695           0.900048  Q15997578-2  Q15997578-7          job   \n",
              "3      3.170695           0.900048  Q15997578-1  Q15997578-7          job   \n",
              "4      3.172553           0.900164  Q5726641-11   Q5726641-8        henry   \n",
              "\n",
              "  first_name_r surname_l surname_r first_and_surname_l first_and_surname_r  \\\n",
              "0       samuel   shelley   shelley      samuel shelley      samuel shelley   \n",
              "1      wilding   wilding      None         job wilding             wilding   \n",
              "2      wilding   wilding      None         job wilding             wilding   \n",
              "3      wilding   wilding      None         job wilding             wilding   \n",
              "4        harry      page     paige          henry page         harry paige   \n",
              "\n",
              "   ...  gamma_postcode_fake            birth_place_l            birth_place_r  \\\n",
              "0  ...                    0              whitechapel           city of london   \n",
              "1  ...                   -1                  wrexham                  wrexham   \n",
              "2  ...                   -1                  wrexham                  wrexham   \n",
              "3  ...                   -1                  wrexham                  wrexham   \n",
              "4  ...                    2  staffordshire moorlands  staffordshire moorlands   \n",
              "\n",
              "   gamma_birth_place                 occupation_l  \\\n",
              "0                  0                  illuminator   \n",
              "1                  2  association football player   \n",
              "2                  2  association football player   \n",
              "3                  2  association football player   \n",
              "4                  2                    cricketer   \n",
              "\n",
              "                  occupation_r  gamma_occupation     full_name_l  \\\n",
              "0                  illuminator                 1  samuel shelley   \n",
              "1  association football player                 1     job wilding   \n",
              "2  association football player                 1     job wilding   \n",
              "3  association football player                 1     job wilding   \n",
              "4                    cricketer                 1      henry page   \n",
              "\n",
              "      full_name_r  match_key  \n",
              "0  samuel shelley          0  \n",
              "1         wilding          2  \n",
              "2         wilding          2  \n",
              "3         wilding          2  \n",
              "4     harry paige          3  \n",
              "\n",
              "[5 rows x 26 columns]"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "results.as_pandas_dataframe(limit=5)"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3 (ipykernel)",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.10.8"
    },
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "state": {
          "6b84d4a42f1a479ca6d8e1b02ccd8eda": {
            "model_module": "@jupyter-widgets/base",
            "model_module_version": "2.0.0",
            "model_name": "LayoutModel",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "2.0.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "2.0.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border_bottom": null,
              "border_left": null,
              "border_right": null,
              "border_top": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": "auto"
            }
          },
          "df640bcb35b2441a904ae87dc47249f9": {
            "model_module": "@jupyter-widgets/controls",
            "model_module_version": "2.0.0",
            "model_name": "FloatProgressModel",
            "state": {
              "_dom_classes": [],
              "_model_module": "@jupyter-widgets/controls",
              "_model_module_version": "2.0.0",
              "_model_name": "FloatProgressModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/controls",
              "_view_module_version": "2.0.0",
              "_view_name": "ProgressView",
              "bar_style": "",
              "description": "",
              "description_allow_html": false,
              "layout": "IPY_MODEL_6b84d4a42f1a479ca6d8e1b02ccd8eda",
              "max": 100,
              "min": 0,
              "orientation": "horizontal",
              "style": "IPY_MODEL_e2e4b97696234790991bc2a5ca2e731a",
              "tabbable": null,
              "tooltip": null,
              "value": 100
            }
          },
          "e2e4b97696234790991bc2a5ca2e731a": {
            "model_module": "@jupyter-widgets/controls",
            "model_module_version": "2.0.0",
            "model_name": "ProgressStyleModel",
            "state": {
              "_model_module": "@jupyter-widgets/controls",
              "_model_module_version": "2.0.0",
              "_model_name": "ProgressStyleModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "2.0.0",
              "_view_name": "StyleView",
              "bar_color": "black",
              "description_width": ""
            }
          }
        },
        "version_major": 2,
        "version_minor": 0
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}